SPB Git
1.4 KB · 17 lines tsx
1import type { Metadata } from "next";2import Link from "next/link";3import { getLocale } from "@/lib/i18n/server";4import { href, t } from "@/lib/i18n";5import { seriesWithCounts } from "@/lib/papers/queries";6export const revalidate = 300;7export async function generateMetadata(): Promise<Metadata> { const d = t(await getLocale()); return { title: d.series.title, description: d.series.lead, alternates: { canonical: "/series" } }; }8export default async function SeriesPage() {9  const locale = await getLocale(); const d = t(locale); const rows = await seriesWithCounts();10  return (11    <div className="container py-10">12      <h1 className="text-3xl sm:text-4xl">{d.series.title}</h1><p className="meta mt-2 max-w-3xl">{d.series.lead}</p>13      <ul className="grid gap-4 md:grid-cols-2 mt-8">{rows.map((s) => <li key={s.slug} className="card p-5"><p className="kicker">{s.code}</p><h2 className="text-xl mt-1"><Link href={href(locale, `/papers?series=${s.code}`)} className="no-underline hover:underline text-fg">{locale === "fr" ? s.name_fr : s.name_en}</Link></h2><p className="text-sm text-fg-2 mt-2 leading-relaxed">{locale === "fr" ? s.description_fr : s.description_en}</p><p className="meta mt-3">{s.n} {d.topics.papers}{s.min_no ? ` · ${s.code}${String(s.min_no).padStart(2, "0")} – ${s.code}${String(s.max_no).padStart(2, "0")}` : ""}</p></li>)}</ul>14    </div>15  );16}17
Files · main
Menu

Theme